﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

using System.Data.SqlClient;
using MySql.Data.MySqlClient;

namespace JA.Negocios
{
    public static partial class ModelBO
    {

        public static TipoVO getTipo(int idTipo, string tipo)
        {
            TipoVO tipoVO = null;
            List<TipoVO> listTipoVOs = getTipos(idTipo, tipo);
            if (listTipoVOs != null && listTipoVOs.Count > 0)
            {
                tipoVO = listTipoVOs[0];
            }
            return tipoVO;
        }

        public static List<TipoVO> getTipos()
        {
            return getTipos(null,null);
        }

        public static List<TipoVO> getTipos(int? idTipo, string tipo)
        {
            string where = "WHERE ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdTipo, Tipo, Cadastro, CadastradoPor, Edicao, EditadoPor ");
            query.AppendLine("FROM tipo ");

            if (idTipo != null)
            {
                query.AppendLine(where + "IdTipo=?IdTipo ");
                where = "AND ";
            }
            if (tipo != null)
            {
                query.AppendLine(where + "Tipo LIKE ?Tipo ");
                where = "AND ";
            }

            query.AppendLine("ORDER BY Tipo ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idTipo != null) cmd.Parameters.AddWithValue("?IdTipo", idTipo);
            if (tipo != null) cmd.Parameters.AddWithValue("?Tipo", "%" + tipo + "%");

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<TipoVO> listTipo = new List<TipoVO>();

                while (reader.Read())
                {
                    TipoVO tipoVO = TipoVO.CreateTipoVO();
                    tipoVO.idTipo = reader.GetInt32(reader.GetOrdinal("IdTipo"));
                    tipoVO.tipo = reader.GetString(reader.GetOrdinal("Tipo"));
                    tipoVO.cadastro = reader.GetDateTime(reader.GetOrdinal("Cadastro"));
                    tipoVO.cadastradoPor = reader.GetString(reader.GetOrdinal("CadastradoPor"));
                    tipoVO.edicao = reader.GetDateTime(reader.GetOrdinal("Edicao"));
                    tipoVO.editadoPor = reader.GetString(reader.GetOrdinal("EditadoPor"));
                    listTipo.Add(tipoVO);
                }
                reader.Close();
                return listTipo;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setTipo(TipoVO tipoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE tipo ");
            query.AppendLine("SET Tipo=?Tipo, Cadastro=?Cadastro, CadastradoPor=?CadastradoPor, Edicao=?Edicao, EditadoPor=?EditadoPor ");
            query.AppendLine("WHERE IdTipo=?IdTipo ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdTipo", tipoVO.idTipo);
            cmd.Parameters.AddWithValue("?Tipo", tipoVO.tipo);
            cmd.Parameters.AddWithValue("?Cadastro", tipoVO.cadastro);
            cmd.Parameters.AddWithValue("?CadastradoPor", tipoVO.cadastradoPor);
            cmd.Parameters.AddWithValue("?Edicao", tipoVO.edicao);
            cmd.Parameters.AddWithValue("?EditadoPor", tipoVO.editadoPor);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newTipo(TipoVO tipoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO tipo ");
            query.AppendLine("  ( Tipo, Cadastro, CadastradoPor, Edicao, EditadoPor ) ");
            query.AppendLine("VALUES (?Tipo, ?Cadastro, ?CadastradoPor, ?Edicao, ?EditadoPor ) ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?Tipo", tipoVO.tipo);
            cmd.Parameters.AddWithValue("?Cadastro", tipoVO.cadastro);
            cmd.Parameters.AddWithValue("?CadastradoPor", tipoVO.cadastradoPor);
            cmd.Parameters.AddWithValue("?Edicao", tipoVO.edicao);
            cmd.Parameters.AddWithValue("?EditadoPor", tipoVO.editadoPor);

            try
            {
                cmd.Connection.Open();
                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delTipo(TipoVO tipoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM tipo ");
            query.AppendLine("WHERE IdTipo=?IdTipo ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdTipo", tipoVO.idTipo);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

    }
}
